/*
 * @author: yang long
 * @date: 2022-06-27 18:55:08
 * @description: 创建 Virtual DOM
 * @param {string}: type 类型
 * @param {object | null}: props 属性
 * @param {createElement[]}: children 子元素
 * @return {object}: Virtual DOM
 */
export default function createElement(type, props, ...children) {
  const childElements = [].concat(...children).reduce((result, child) => {
    // 处理 false，true，null 情况
    if (child !== false && child !== true && child !== null) {
      if (child instanceof Object) {
        result.push(child);
      } else {
        // 处理文本节点
        result.push(createElement('text', { textContent: child }));
      }
    }
    return result;
  }, []);

  return {
    type,
    // 给 props 添加 children 属性
    props: Object.assign({ children: childElements }, props),
  };
}
